package ali;

/**
 *
 * @author wxh
 */
public class Solution_9 {

	public void merge(int[] nums1, int m, int[] nums2, int n) {

		int p1 = m - 1; // p1指针指向数组1的最后一个节点
		int p2 = n - 1; // p2指针指向数组2的最后一个节点
		int tail = m + n - 1; // 让tail指针指向合并后的数组的最后一个节点（因为题目给前置条件是，nums1的空间 = m + n，所以nums1就有足够的空间保存来自nums2的元素）

		int cur;
		while (p1 >= 0 || p2 >= 0) {
			if (p1 == -1) { // 如果数组1遍历完，则直接取数组2的值
				cur = nums2[p2--];
			} else if (p2 == -1) { // 如果数组2遍历完，则直接取数组1的值
				cur = nums1[p1--];
			} else if (nums1[p1] < nums2[p2]) { //如果数组1当前值小于数组2当前值，则取数组2的当前值
				cur = nums2[p2--];
			} else { //如果数组1当前值大于数组2当前值，则取数组1的当前值
				cur = nums1[p1--];
			}

			// 将取到的值放入合适位置
			nums1[tail--] = cur;
		}

	}

	public static void main(String[] args) {
		Solution_9 solution_9 = new Solution_9();
		solution_9.merge(new int[]{0}, 0, new int[]{1}, 1);

	}

}